package org.unc.hive.client; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Set; import org.gwtmultipage.client.*; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.CloseEvent; import com.google.gwt.event.logical.shared.CloseHandler; import com.google.gwt.event.logical.shared.OpenEvent; import com.google.gwt.event.logical.shared.OpenHandler; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.CaptionPanel; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.DecoratedPopupPanel; import com.google.gwt.user.client.ui.DialogBox; import com.google.gwt.user.client.ui.DisclosureHandler; import com.google.gwt.user.client.ui.DisclosurePanel; import com.google.gwt.user.client.ui.DisclosurePanelImages; import com.google.gwt.user.client.ui.DockPanel; import com.google.gwt.user.client.ui.FileUpload; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.FormPanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HasVerticalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Hyperlink; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.PushButton; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.TextArea; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.ToggleButton; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent; import com.google.gwt.user.client.ui.FormPanel.SubmitEvent; import com.google.gwt.user.client.ui.FlexTable; @UrlPatternEntryPoint(value = "indexing([^.]*).html(\\\\?.*)?") public class Indexer implements EntryPoint { private CaptionPanel indexingCaption; private FlowPanel indexingSteps; private String fileName; private String tempFileName; private List<String> openedVocabularies; // store the name of current loaded // vocabularies in client side private List<String> allVocabulary; // store the name of all vocabularies // that hive have private HIVEMessages messages = (HIVEMessages)GWT.create(HIVEMessages.class); private List<ConceptProxy> selectedConcepts; private Button startover = new Button(messages.indexer_startOver()); private Button selectedConceptsButton; private FlowPanel addVocabularyPanel; private HorizontalPanel configure; private Button openNewVocabulary; private FlexTable indexingTable; private PopupPanel uploadPopup; private HorizontalPanel deleteFile; private String fileToProcess; private SimplePanel conceptInfo; private DockPanel resultDock; private HorizontalPanel steps; private final IndexerServiceAsync indexerService = GWT .create(IndexerService.class); private final ConceptBrowserServiceAsync conceptBrowserService = GWT .create(ConceptBrowserService.class); private boolean isFileUploaded; private boolean isURL; private Anchor clickedConcept; private boolean selected; private String recText = ""; private TextArea recs = new TextArea(); private RecordFormatter formatter = new RecordFormatter(); @Override public void onModuleLoad() { conceptBrowserService .getAllVocabulariesName(new AsyncCallback<List<String>>() { @Override public void onFailure(Throwable caught) { // TODO Auto-generated method stub Window.alert(caught.getMessage()); } @Override public void onSuccess(List<String> result) { // TODO Auto-generated method stub allVocabulary = result; } }); this.initialize(); } private void displayOpenedVocabularies() { for (final String c : openedVocabularies) { final ToggleButton closeVocabulary = new ToggleButton(new Image( "./img/close-white.jpg"), new Image("./img/disabled.jpg")); Label vname = new Label(c); vname.addStyleName("vname"); final HorizontalPanel hp = new HorizontalPanel(); hp.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); hp.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT); hp.addStyleName("vocabularyMenu"); hp.add(closeVocabulary); hp.add(vname); configure.add(hp); closeVocabulary.addClickHandler(new ClickHandler() { public void onClick(ClickEvent e) { if (closeVocabulary.isDown()) { closeVocabulary.setDown(false); ConfirmDialog dlg = new ConfirmDialog(hp, closeVocabulary, c, false, true); dlg.center(); dlg.show(); } else { openedVocabularies.add(c); } } }); } } private void initVocabulariesMenu() { this.openNewVocabulary = new Button(messages.indexer_selectButton() ); openNewVocabulary.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { final PopupPanel pop = new PopupPanel(true, false); addVocabularyPanel.clear(); addVocabularyPanel.removeFromParent(); for (final String c : allVocabulary) { if (!openedVocabularies.contains(c.toLowerCase())) { final Hyperlink hp = new Hyperlink(c, c); hp.addClickHandler(new ClickHandler() { public void onClick(ClickEvent e) { openedVocabularies.add(c.toLowerCase()); final ToggleButton closeVocabulary = new ToggleButton( new Image("./img/close-white.jpg"), new Image("./img/disabled.jpg")); Label vname = new Label(c); vname.addStyleName("vname"); final HorizontalPanel vpanel = new HorizontalPanel(); vpanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); vpanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT); vpanel.addStyleName("vocabularyMenu"); vpanel.add(closeVocabulary); vpanel.add(vname); configure.insert(vpanel, configure.getWidgetCount() - 1); pop.hide(); closeVocabulary .addClickHandler(new ClickHandler() { public void onClick(ClickEvent e) { if (closeVocabulary.isDown()) { closeVocabulary .setDown(false); ConfirmDialog dlg = new ConfirmDialog( vpanel, closeVocabulary, c, false, true); dlg.show(); dlg.center(); } else { openedVocabularies.add(c); final Hyperlink hp = new Hyperlink( c, c); hp.addClickHandler(new ClickHandler() { @Override public void onClick( ClickEvent event) { // TODO // Auto-generated // method stub } }); } } }); } }); addVocabularyPanel.add(hp); } } if (addVocabularyPanel.getWidgetCount() == 0) { Label msg = new Label( messages.indexer_allVocabsSelected() ); addVocabularyPanel.add(msg); } pop.add(addVocabularyPanel); pop.addStyleName("add-pop"); pop.setPopupPosition(openNewVocabulary.getAbsoluteLeft() + 12, openNewVocabulary.getAbsoluteTop() + 11); pop.show(); } }); configure.add(openNewVocabulary); } private void initialize() { this.deleteFile = new HorizontalPanel(); this.isFileUploaded = false; this.isURL = false; uploadPopup = new PopupPanel(false); uploadPopup.addStyleName("upload-popup"); uploadPopup.setGlassEnabled(true); Label uploading = new Label(messages.indexer_uploadingMessage() ); uploading.setHeight("100%"); uploadPopup.add(uploading); openedVocabularies = new ArrayList<String>(); selectedConcepts = new ArrayList<ConceptProxy>(); indexingSteps = new FlowPanel(); indexingSteps.addStyleName("indexing-steps"); final HTML steps = new HTML( messages.indexer_pageDesc() + "<br>" + "<ul><li>" + messages.indexer_step1() + "</li>" + "<li>" + messages.indexer_step2() + "</li>" + "<li>" + messages.indexer_step3() + "</li></ul>"); indexingSteps.add(steps); indexingCaption = new CaptionPanel(messages.indexer_indexerLabel()); indexingCaption.addStyleName("indexing-Caption"); indexingTable = new FlexTable(); this.configure = new HorizontalPanel(); configure.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); SimplePanel configureWrapper = new SimplePanel(); configureWrapper.setStyleName("configure"); final Label lb1 = new Label(messages.indexer_selectVocab()); final HTML step1 = new HTML("<img src = './img/step1.png'/>"); HorizontalPanel hp1 = new HorizontalPanel(); hp1.add(step1); hp1.add(lb1); hp1.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); hp1.setCellVerticalAlignment(lb1, HasVerticalAlignment.ALIGN_MIDDLE); hp1.setCellVerticalAlignment(step1, HasVerticalAlignment.ALIGN_MIDDLE); lb1.addStyleName("label"); indexingTable.setWidget(0, 0, hp1); indexingTable.setWidget(0, 1, configure); indexingTable.getCellFormatter().setVerticalAlignment(0, 0, HasVerticalAlignment.ALIGN_MIDDLE); indexingTable.getCellFormatter().setVerticalAlignment(0, 1, HasVerticalAlignment.ALIGN_MIDDLE); addVocabularyPanel = new FlowPanel(); addVocabularyPanel.setSize("200px", "150px"); this.displayOpenedVocabularies(); this.initVocabulariesMenu(); final FormPanel form = new FormPanel(); form.setEncoding(FormPanel.ENCODING_MULTIPART); form.setMethod(FormPanel.METHOD_POST); form.setAction("/FileUpload"); HorizontalPanel uploadholder = new HorizontalPanel(); final FileUpload upload = new FileUpload(); upload.setName("uploadFormElement"); form.add(upload); Button uploadButton = new Button(messages.indexer_uploadButton()); uploadButton.addStyleName("upload-button"); uploadholder.setVerticalAlignment(HasVerticalAlignment.ALIGN_TOP); uploadholder.setCellVerticalAlignment(uploadButton, HasVerticalAlignment.ALIGN_TOP); uploadholder.addStyleName("uploadholder"); uploadholder.add(form); uploadholder.add(uploadButton); uploadButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent e) { form.submit(); } }); form.addSubmitHandler(new FormPanel.SubmitHandler() { public void onSubmit(SubmitEvent event) { // This event is fired just before the form is submitted. We can // take this opportunity to perform validation. // String path = upload.getFilename(); // Window.alert(path); if (upload.getFilename().length() == 0) { Window.alert(messages.indexer_uploadMessage() ); event.cancel(); } else { uploadPopup.center(); uploadPopup.show(); } } }); form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() { public void onSubmitComplete(SubmitCompleteEvent event) { String result = event.getResults(); if (result.contains("success")) { uploadPopup.hide(); if (isFileUploaded = true) { deleteFile.clear(); deleteFile.removeFromParent(); } String response = result.substring(result.indexOf("|") + 1, result.lastIndexOf("?")); String[] fileNames = response.split("\\|"); fileName = fileNames[0]; tempFileName = fileNames[1]; isFileUploaded = true; Label filename = new Label(fileName); // Window.alert(fileName); final PushButton delete = new PushButton(new Image( "./img/cancel-upld.gif")); deleteFile.add(delete); deleteFile.add(filename); indexingTable.insertRow(2); indexingTable.setWidget(2, 1, deleteFile); delete.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { // TODO Auto-generated method stub isFileUploaded = false; deleteFile.removeFromParent(); } }); } } }); Label lb3 = new Label(messages.indexer_uploadLabel()); lb3.addStyleName("label"); HorizontalPanel hp2 = new HorizontalPanel(); final HTML step2 = new HTML("<img src = './img/step2.png'/>"); hp2.add(step2); hp2.add(lb3); hp2.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); hp2.setCellVerticalAlignment(lb3, HasVerticalAlignment.ALIGN_MIDDLE); hp2.setCellVerticalAlignment(step2, HasVerticalAlignment.ALIGN_MIDDLE); indexingTable.setWidget(1, 0, hp2); indexingTable.setWidget(1, 1, uploadholder); indexingTable.getCellFormatter().setVerticalAlignment(1, 0, HasVerticalAlignment.ALIGN_MIDDLE); indexingTable.getCellFormatter().setVerticalAlignment(1, 1, HasVerticalAlignment.ALIGN_MIDDLE); final FlowPanel logoPanel = new FlowPanel(); Label powered = new Label(messages.indexer_poweredBy()); HTML kea = new HTML( "<a class = 'kea' href='http://www.nzdl.org/Kea/index.html' target = '_blank'><img src = './img/kea_logo.gif'/></a>", true); logoPanel.add(powered); logoPanel.add(kea); HTML lb4 = new HTML(messages.indexer_enterURL(), false); lb4.addStyleName("or-label"); lb4.addStyleName("label"); indexingTable.setWidget(2, 0, lb4); final TextBox docURL = new TextBox(); docURL.setWidth("300px"); docURL.addStyleName("docURL"); indexingTable.setCellSpacing(0); indexingTable.setWidget(2, 1, docURL); final DisclosurePanelImages images = (DisclosurePanelImages) GWT .create(DisclosurePanelImages.class); class DisclosurePanelHeader extends HorizontalPanel { public DisclosurePanelHeader(boolean isOpen, String html) { add(isOpen ? images.disclosurePanelOpen().createImage() : images.disclosurePanelClosed().createImage()); add(new HTML(html)); } } final DisclosurePanel advancedPanel = new DisclosurePanel( messages.indexer_showAdvancedSettings()); advancedPanel.addCloseHandler(new CloseHandler<DisclosurePanel>() { @Override public void onClose(CloseEvent<DisclosurePanel> event) { advancedPanel.setHeader(new DisclosurePanelHeader(false, messages.indexer_showAdvancedSettings() )); } }); advancedPanel.addOpenHandler(new OpenHandler<DisclosurePanel>() { @Override public void onOpen(OpenEvent<DisclosurePanel> event) { advancedPanel.setHeader(new DisclosurePanelHeader(true, messages.indexer_hideAdvancedSettings())); } }); // Create the algorithm selection listbox and panel final ListBox algSel = new ListBox(); algSel.addItem("Maui"); algSel.addItem("KEA"); algSel.addItem("dummy"); Label algSelLbl = new Label(); algSelLbl.setText(" " + messages.indexer_algorithm()); algSelLbl.addStyleName("label"); HorizontalPanel algSelPanel = new HorizontalPanel(); algSelPanel.setStyleName("advanced-subpanel"); algSelPanel.add(algSel); algSelPanel.add(algSelLbl); algSelPanel .setTitle(messages.indexer_algorithmDesc()); // Create the max hops listbox and panel final ListBox maxHops = new ListBox(); maxHops.addItem("0"); maxHops.addItem("1"); maxHops.addItem("2"); maxHops.addItem("3"); maxHops.addItem("4"); maxHops.addItem("5"); maxHops.setStyleName("max-hops"); Label maxHopsLbl = new Label(); maxHopsLbl.setText(" " + messages.indexer_numHops()); maxHopsLbl.addStyleName("label"); HorizontalPanel maxHopsPanel = new HorizontalPanel(); maxHopsPanel.setStyleName("advanced-subpanel"); maxHopsPanel.add(maxHops); maxHopsPanel.add(maxHopsLbl); maxHopsPanel .setTitle(messages.indexer_numHopsDesc()); // Create max terms listbox and panel final ListBox maxTerms = new ListBox(); maxTerms.addItem("5"); maxTerms.addItem("10"); maxTerms.addItem("15"); maxTerms.addItem("20"); maxTerms.setItemSelected(1, true); maxTerms.setStyleName("max-hops"); Label maxTermsLbl = new Label(); maxTermsLbl.setText(" " + messages.indexer_numTerms()); maxTermsLbl.addStyleName("label"); HorizontalPanel maxTermsPanel = new HorizontalPanel(); maxTermsPanel.setStyleName("advanced-subpanel"); maxTermsPanel.add(maxTerms); maxTermsPanel.add(maxTermsLbl); maxTermsPanel.setTitle(messages.indexer_numTermsTip()); // Create minoccur listbox and panel final ListBox minOccur = new ListBox(); minOccur.addItem("1"); minOccur.addItem("2"); minOccur.setItemSelected(1, true); minOccur.setStyleName("max-hops"); Label minOccurLbl = new Label(); minOccurLbl.setText(" " + messages.indexer_minOccur()); minOccurLbl.addStyleName("label"); HorizontalPanel minOccurPanel = new HorizontalPanel(); minOccurPanel.setStyleName("advanced-subpanel"); minOccurPanel.add(minOccur); minOccurPanel.add(minOccurLbl); minOccurPanel.setTitle(messages.indexer_minOccurTip()); final CheckBox diffCb = new CheckBox(); Label diffLbl = new Label(); diffLbl.setText(" " + messages.indexer_diffOnly() ); diffLbl.setStyleName("label"); HorizontalPanel diffPanel = new HorizontalPanel(); diffPanel.setStyleName("advanced-subpanel"); diffPanel.add(diffCb); diffPanel.add(diffLbl); diffPanel .setTitle(messages.indexer_diffOnlyTip() ); VerticalPanel vp = new VerticalPanel(); vp.add(algSelPanel); vp.add(maxHopsPanel); vp.add(maxTermsPanel); vp.add(minOccurPanel); vp.add(diffPanel); advancedPanel.add(vp); advancedPanel.setStyleName("advanced-panel"); advancedPanel.setWidth("300px"); indexingTable.setWidget(3, 1, advancedPanel); Button startProcessing = new Button(messages.indexer_startButton()); startProcessing.setStyleName("start-processing"); final HTML step3 = new HTML("<img src = './img/step3.png'/>"); indexingTable.setWidget(0, 2, step3); indexingTable.setWidget(1, 2, startProcessing); indexingTable.getFlexCellFormatter().setHorizontalAlignment(1, 2, HasHorizontalAlignment.ALIGN_RIGHT); indexingTable.setWidget(2, 2, logoPanel); indexingTable.getFlexCellFormatter().addStyleName(0, 2, "border-left"); indexingTable.getFlexCellFormatter().addStyleName(1, 2, "border-left-increase"); indexingTable.getFlexCellFormatter().addStyleName(2, 2, "border-left-increase2"); startProcessing.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { // TODO Auto-generated method stub boolean isValid = false; String url = docURL.getValue(); String algorithm = algSel.getValue(algSel.getSelectedIndex()); int hops = Integer.parseInt(maxHops.getValue(maxHops .getSelectedIndex())); int terms = Integer.parseInt(maxTerms.getValue(maxTerms .getSelectedIndex())); int minoccur = Integer.parseInt(minOccur.getValue(minOccur .getSelectedIndex())); boolean diff = diffCb.getValue(); if (openedVocabularies.isEmpty()) { Window.alert(messages.indexer_selectVocabMessage()); } else if (isFileUploaded == true && url.equals("")) { fileToProcess = tempFileName; isValid = true; } else if (isFileUploaded == false && !url.equals("")) { if (!url.startsWith("http://") && !url.startsWith("https://")) url = "http://" + url; fileToProcess = url; isValid = true; } else if (isFileUploaded == true && !url.equals("")) { Window.alert(messages.indexer_uploadOrUrlError()); } else if (isFileUploaded == false && url.equals("")) { Window.alert(messages.indexer_uploadOrUrlMessage()); } if (isValid == true) { final PopupPanel processingPopup = new PopupPanel(); final Label processing = new Label(messages.indexer_processingMessagej()); processingPopup.addStyleName("z-index"); processingPopup.add(processing); processingPopup.setGlassEnabled(true); processingPopup.center(); processingPopup.show(); indexerService.getTags(fileToProcess, openedVocabularies, hops, terms, diff, minoccur, algorithm, new AsyncCallback<List<ConceptProxy>>() { @Override public void onFailure(Throwable caught) { Window.alert(messages.indexer_errorMessage()); caught.printStackTrace(); processingPopup.hide(); } @Override public void onSuccess(List<ConceptProxy> result) { // TODO Auto-generated method stub processingPopup.hide(); displayResult(result); } }); } } }); for (int i = 0; i < indexingTable.getRowCount(); i++) { indexingTable.getCellFormatter().addStyleName(i, 0, "indexing-table-prompt"); indexingTable.getCellFormatter().addStyleName(i, 1, "indexing-table-control"); if (i <= 2) { indexingTable.getRowFormatter().addStyleName(i, "indexing-table-operation"); } } indexingTable.addStyleName("indexing-table"); indexingCaption.add(indexingTable); resultDock = new DockPanel(); resultDock.addStyleName("result-Dock"); resultDock.add(indexingSteps, DockPanel.NORTH); resultDock.add(indexingCaption, DockPanel.CENTER); RootPanel.get("indexer").add(resultDock); // test RootPanel.get("indexer").add(indexingCaption); } private void displayResult(List<ConceptProxy> result) { indexingCaption.clear(); indexingCaption.setCaptionText(messages.indexer_extractedConceptsLabel()); indexingCaption.removeFromParent(); indexingTable.clear(); resultDock = new DockPanel(); resultDock.addStyleName("result-Dock"); indexingSteps.clear(); final HTML steps = new HTML(messages.indexer_formatDesc()); indexingSteps.add(steps); startover.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { // TODO Auto-generated method stub indexingSteps.clear(); resultDock.clear(); resultDock.removeFromParent(); initialize(); } }); selectedConceptsButton = new Button(""); selectedConceptsButton .setHTML("<html>" + messages.indexer_selectConcepts() + "</html>"); selectedConceptsButton.setStyleName("selectedConceptsButton"); selectedConceptsButton.addClickHandler(new FormatRecordsHandler()); startover.setStyleName("start-over"); FlowPanel fp = new FlowPanel(); fp.setStyleName("vocabulary-tags"); fp.add(startover); fp.add(selectedConceptsButton); resultDock.add(fp, DockPanel.NORTH); resultDock.add(indexingCaption, DockPanel.CENTER); conceptInfo = new SimplePanel(); resultDock.add(conceptInfo, DockPanel.SOUTH); RootPanel.get("indexer").add(resultDock); DockPanel tagDock = new DockPanel(); FlowPanel tagcloud = new FlowPanel(); tagcloud.setWidth("600px"); tagcloud.addStyleName("tag-cloud"); VerticalPanel oriVoc = new VerticalPanel(); oriVoc.setSpacing(5); List<String> oriList = new ArrayList<String>(); indexingCaption.add(tagDock); tagDock.add(tagcloud, DockPanel.CENTER); tagDock.add(oriVoc, DockPanel.WEST); String current = null; FlowPanel currentPanel = new FlowPanel(); currentPanel.setStyleName("vocabulary-tags"); double minScore = 99999; double maxScore = 0.0; for (ConceptProxy cp : result) { String cporigin = cp.getOrigin(); if ((openedVocabularies.contains(cporigin.toLowerCase())) && (!oriList.contains(cporigin))) { oriList.add(cporigin); if (cp.getScore() < minScore) minScore = cp.getScore(); if (cp.getScore() > maxScore) maxScore = cp.getScore(); } } minScore = minScore * 10000; maxScore = maxScore * 10000; int r = (int)((maxScore - minScore) / 4); for (String cporigin : oriList) { currentPanel = new FlowPanel(); currentPanel.setStyleName("vocabulary-tags"); for (ConceptProxy cp : result) { String ori = cp.getOrigin(); if (!openedVocabularies.contains(ori.toLowerCase())) continue; if (ori.equals(cporigin)) { String uri = cp.getURI(); String uris[] = uri.split(" "); String namespace = uris[0]; String lp = uris[1]; String colorCss = ori.toLowerCase() + "-color"; String term = cp.getPreLabel(); term = term.replaceAll(" ", " ") + " "; double score = cp.getScore(); /* Decide the font-size based on the score */ double rate = (score * 10000); String fontCss = ""; if (rate >= 0 && rate < (minScore + r)) fontCss = "font-three"; else if (rate >= (minScore + r) && rate < (minScore + 2*r)) fontCss = "font-four"; else if (rate >= (minScore + 2*r) && rate < (minScore + 3*r)) fontCss = "font-five"; else fontCss = "font-six"; final Anchor a = new Anchor(term, true); a.setStyleName("base-css"); a.addStyleName(colorCss); a.addStyleName(fontCss); a.addStyleName("tag-name"); a.addStyleName("deselectedconcept-bgcolor"); a.addClickHandler(new ConceptHandler(namespace, lp)); currentPanel.add(a); } } tagcloud.add(currentPanel); } // tagcloud.add(currentPanel); for (String ori : oriList) { Label square = new Label(""); square.setSize("15px", "15px"); square.addStyleName(ori.toLowerCase() + "-bgcolor"); Label name = new Label(" " + ori); HorizontalPanel hp = new HorizontalPanel(); hp.add(square); hp.add(name); oriVoc.add(hp); } } private class ConfirmDialog extends DialogBox { String associateVoc; int vocIndex; public ConfirmDialog(final HorizontalPanel toBeDeleted, final ToggleButton trigger, String vocabulary, boolean autohide, boolean modal) { super(autohide, modal); associateVoc = vocabulary; vocIndex = openedVocabularies.indexOf(associateVoc.toLowerCase()); this.setText(messages.indexer_confirm() ); this.setAnimationEnabled(true); com.google.gwt.user.client.ui.Button yesBtn = new com.google.gwt.user.client.ui.Button( messages.indexer_yes() ); com.google.gwt.user.client.ui.Button cancelBtn = new com.google.gwt.user.client.ui.Button( messages.indexer_cancel()); VerticalPanel vp = new VerticalPanel(); vp.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); vp.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); vp.setSpacing(10); vp.setSize("100%", "100%"); HTML msg = new HTML(messages.indexer_doYouReally(associateVoc), true); vp.add(msg); yesBtn.addClickHandler(new ClickHandler() { public void onClick(ClickEvent e) { trigger.setDown(true); toBeDeleted.removeFromParent(); ConfirmDialog.this.hide(); /* Delete the vocabulary from UI */ openedVocabularies.remove(vocIndex); } }); cancelBtn.addClickHandler(new ClickHandler() { public void onClick(ClickEvent e) { trigger.setDown(false); ConfirmDialog.this.hide(); } }); HorizontalPanel opr = new HorizontalPanel(); opr.setSpacing(10); opr.add(yesBtn); opr.add(cancelBtn); vp.add(opr); this.add(vp); } public void show() { super.show(); } public void hide() { super.hide(); } } private class ConceptHandler implements ClickHandler { private String namespaceURI; private String localPart; private ConceptHandler(String uri, String lp) { this.namespaceURI = uri; this.localPart = lp; } @Override public void onClick(ClickEvent event) { // Toggle selected concept link, de/re-highlighting with each click selected = false; try { clickedConcept = (Anchor) event.getSource(); String styles = clickedConcept.getStyleName(); if (styles.contains("deselected")) { selected = true; clickedConcept.removeStyleName("deselectedconcept-bgcolor"); clickedConcept.addStyleName("selectedconcept-bgcolor"); } else { selected = false; clickedConcept.removeStyleName("selectedconcept-bgcolor"); clickedConcept.addStyleName("deselectedconcept-bgcolor"); } } catch (ClassCastException exc) { Window.alert("Class Cast Exception: ClickEvent source to Anchor"); } conceptBrowserService.getConceptByURI(namespaceURI, localPart, new AsyncCallback<ConceptProxy>() { @Override public void onFailure(Throwable caught) { // TODO Auto-generated method stub Window.alert(caught.getMessage()); } @Override public void onSuccess(ConceptProxy result) { updateSelectedConcepts(result, selected); displayConceptInfo(result); } }); } } private class SKOSHandler implements ClickHandler { private String SKOSCode; public SKOSHandler(String SKOSCode) { super(); this.SKOSCode = SKOSCode; } public void onClick(ClickEvent event) { // TODO Auto-generated method stub final DecoratedPopupPanel skosDlg = new DecoratedPopupPanel(false); skosDlg.setAnimationEnabled(false); skosDlg.setGlassEnabled(true); TextArea skos = new TextArea(); skos.setSize("650px", "400px"); skos.setValue(SKOSCode); PushButton closeButton = new PushButton(new Image( "./img/closebutton.png")); closeButton.addStyleName("close-button"); closeButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { // TODO Auto-generated method stub skosDlg.removeFromParent(); } }); DockPanel dock = new DockPanel(); dock.add(closeButton, DockPanel.NORTH); dock.add(skos, DockPanel.CENTER); dock.setCellHorizontalAlignment(closeButton, HasHorizontalAlignment.ALIGN_RIGHT); dock.setCellWidth(closeButton, "20px"); skosDlg.add(dock); skosDlg.show(); skosDlg.center(); } } private class FormatRecordsHandler implements ClickHandler { public FormatRecordsHandler() { super(); } public void onClick(ClickEvent event) { if (selectedConcepts.isEmpty()) { Window.alert(messages.indexer_selectConceptMessage()); return; } final DecoratedPopupPanel formatRecDlg = new DecoratedPopupPanel( false); formatRecDlg.setAnimationEnabled(false); formatRecDlg.setGlassEnabled(true); formatRecDlg.addStyleName("recordformat-panel"); FlowPanel hdr = new FlowPanel(); Label lb = new Label(messages.indexer_selectFormat()); lb.addStyleName("heading"); lb.addStyleName("format-label"); recs.setSize("800px", "400px"); recs.setValue(""); final ListBox formatList = new ListBox(); formatList.addItem(messages.indexer_formatSkos()); formatList.addItem(messages.indexer_formatNT() ); formatList.addItem(messages.indexer_formatDC()); formatList.addItem(messages.indexer_foramtMODS()); formatList.addItem(messages.indexer_formatMARC()); formatList.setVisibleItemCount(1); formatList.setSelectedIndex(0); formatList.addStyleName("format-listbox"); formatter.init(); formatList.addChangeHandler(new ChangeHandler() { public void onChange(ChangeEvent event) { recText = ""; recText = formatter.format(selectedConcepts, formatList .getItemText(formatList.getSelectedIndex())); recs.setValue(recText); } }); // default record format is SKOS RDF/XML recText = formatter.format(selectedConcepts, messages.indexer_formatSkos() ); recs.setValue(recText); PushButton closeButton = new PushButton(new Image( "./img/closebutton.png")); closeButton.addStyleName("close-button"); closeButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { formatRecDlg.removeFromParent(); } }); DockPanel dock = new DockPanel(); dock.add(closeButton, DockPanel.NORTH); hdr.add(lb); hdr.add(formatList); dock.add(hdr, DockPanel.NORTH); dock.add(recs, DockPanel.CENTER); dock.setCellHorizontalAlignment(closeButton, HasHorizontalAlignment.ALIGN_RIGHT); dock.setCellWidth(closeButton, "20px"); formatRecDlg.add(dock); formatRecDlg.show(); formatRecDlg.center(); } } private void displayConceptInfo(ConceptProxy result) { conceptInfo.clear(); conceptInfo.addStyleName("concept-info"); VerticalPanel vp = new VerticalPanel(); VerticalPanel header = new VerticalPanel(); Label htext = new Label(result.getOrigin() + "->" + result.getPreLabel()); htext.addStyleName("concept-name-style"); Button showSKOSBtn = new Button(messages.indexer_viewSKOS()); showSKOSBtn.setStyleName("skos-btn"); showSKOSBtn.addClickHandler(new SKOSHandler(result.getSkosCode())); header.addStyleName("concept-name-header"); header.add(htext); header.add(showSKOSBtn); header.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); header.setCellHorizontalAlignment(showSKOSBtn, HasHorizontalAlignment.ALIGN_RIGHT); header.addStyleName("concept-header"); header.setWidth("100%"); vp.add(header); Label preLabel = new Label(result.getPreLabel()); FlexTable conceptTable = new FlexTable(); conceptTable.setText(0, 0, messages.indexer_prefLabel()); conceptTable.setWidget(0, 1, preLabel); conceptTable.setText(1, 0, messages.indexer_uri()); conceptTable.setText(1, 1, result.getURI()); List<String> altLabel = result.getAltLabel(); conceptTable.setText(2, 0, messages.indexer_altLabel() ); String altlabels = ""; if (altLabel != null) { for (String c : altLabel) { altlabels = altlabels + c + "; "; } } else { altlabels = messages.indexer_noAltLabels(); } conceptTable.setText(2, 1, altlabels); HashMap<String, String> broader = result.getBroader(); conceptTable.setText(3, 0, messages.indexer_broaderConcepts() ); if (broader != null) { FlowPanel broaderPanel = new FlowPanel(); Set<String> keys = broader.keySet(); int i = 0; for (final String key : keys) { i++; String uri = broader.get(key); String[] tokens = uri.split(" "); String namespaceURI = tokens[0]; String localPart = tokens[1]; ConceptLink hp = new ConceptLink(namespaceURI, localPart, key, localPart); hp.addClickHandler(new ConceptHandler(namespaceURI, localPart)); hp.addStyleName("Hyperlink-trick"); broaderPanel.add(hp); } conceptTable.setWidget(3, 1, broaderPanel); } else { conceptTable.setText(3, 1, messages.indexer_noBroaders()); } conceptTable.setText(4, 0, messages.indexer_narrowerConcepts()); HashMap<String, String> narrower = result.getNarrower(); if (narrower != null) { FlowPanel narrowerPanel = new FlowPanel(); Set<String> keys = narrower.keySet(); for (String key : keys) { String uri = narrower.get(key); String[] tokens = uri.split(" "); String namespaceURI = tokens[0]; String localPart = tokens[1]; ConceptLink hp = new ConceptLink(namespaceURI, localPart, key, localPart); hp.addClickHandler(new ConceptHandler(namespaceURI, localPart)); hp.addStyleName("Hyperlink-trick"); narrowerPanel.add(hp); } conceptTable.setWidget(4, 1, narrowerPanel); } else { conceptTable.setText(4, 1, messages.indexer_narrowers()); } HashMap<String, String> related = result.getRelated(); conceptTable.setText(5, 0, messages.indexer_relatedConcepts()); if (related != null) { FlowPanel relatedPanel = new FlowPanel(); Set<String> keys = related.keySet(); for (String key : keys) { String uri = related.get(key); String[] tokens = uri.split(" "); String namespaceURI = tokens[0]; String localPart = tokens[1]; ConceptLink hp = new ConceptLink(namespaceURI, localPart, key, localPart); hp.addClickHandler(new ConceptHandler(namespaceURI, localPart)); hp.addStyleName("Hyperlink-trick"); relatedPanel.add(hp); conceptTable.setWidget(5, 1, relatedPanel); } } else { conceptTable.setText(5, 1, messages.indexer_noRelateds()); } List<String> scopeNotes = result.getScopeNotes(); conceptTable.setText(6, 0, messages.indexer_scopeNotes()); String sn = ""; if (scopeNotes != null) { for (String s : scopeNotes) { sn = sn + s + "; "; } } else { sn = messages.indexer_noScopeNotes() ; } conceptTable.setText(6, 1, sn); conceptTable.setWidth("580px"); conceptTable.setCellSpacing(0); conceptTable.addStyleName("concept-table"); for (int j = 0; j < conceptTable.getRowCount(); j++) { conceptTable.getCellFormatter().addStyleName(j, 0, "table-heading"); conceptTable.getCellFormatter().addStyleName(j, 1, "common-row"); if ((j % 2) == 0) { conceptTable.getRowFormatter().addStyleName(j, "even-row"); } else { conceptTable.getRowFormatter().addStyleName(j, "uneven-row"); } } vp.add(conceptTable); conceptInfo.add(vp); } private void updateSelectedConcepts(ConceptProxy result, boolean selected) { int numberOfSelectedConcepts = 0; if (selected) selectedConcepts.add(result); // make this a set?? else { int indx = -1; for (ConceptProxy cp : selectedConcepts) { if (cp.getPreLabel().equalsIgnoreCase(result.getPreLabel()) && cp.getURI().equalsIgnoreCase(result.getURI())) { indx = selectedConcepts.indexOf(cp); selectedConcepts.remove(indx); break; } } } String numConcepts = messages.indexer_selectConcepts() + " "; if (!selectedConcepts.isEmpty()) { numberOfSelectedConcepts = selectedConcepts.size(); numConcepts = String.valueOf(numberOfSelectedConcepts); numConcepts = numConcepts + ((numberOfSelectedConcepts == 1) ? " " + messages.indexer_conceptSelected() : " " + messages.indexer_conceptsSelected()); } numConcepts = "<html>" + numConcepts + "<br>" + messages.indexer_viewMultipleFormats() + "</html>"; selectedConceptsButton.setHTML(numConcepts); } }